import wx
from datetime import date, datetime
from Estabelecimento import Estabelecimento
from Repositorio import Armazenar
from Arvore import Arvore

class PanelComprar(wx.Panel):
    def _init_ctrls(self, prnt):

        wx.Panel.__init__(self, id=-1, name='', parent=prnt, size=wx.Size(411, 213),
              style=wx.TAB_TRAVERSAL)
        self.SetClientSize(wx.Size(420, 320))

        self.parent = prnt

        self.labelComprar = wx.StaticText(id=-1,
              label='Dados de Compra', name='staticText1', parent=self,
              pos=wx.Point(115, 2), size=wx.Size(107, 23), style=0)
        self.labelComprar.SetFont(wx.Font(12, wx.SWISS, wx.NORMAL, wx.BOLD,
              False, 'Tahoma'))

        self.labelCnpj = wx.StaticText(id=-1, label='CNPJ: ',
              name='staticText1', parent=self, pos=wx.Point(40, 60),
              size=wx.Size(42, 14), style=0)
        self.labelCnpj.SetFont(wx.Font(9, wx.SWISS, wx.NORMAL, wx.BOLD, False,
              'Tahoma'))

        self.labelNumero = wx.StaticText(id=-1, label='Num. Cartao: ', name='staticText1',
              parent=self, pos=wx.Point(40, 38), size=wx.Size(42, 14), style=0)
        self.labelNumero.SetFont(wx.Font(9, wx.SWISS, wx.NORMAL, wx.BOLD, False,
              'Tahoma'))

        self.labelValor = wx.StaticText(id=-1, label='Valor: ', name='staticText1',
              parent=self, pos=wx.Point(40, 82), size=wx.Size(42, 14), style=0)
        self.labelValor.SetFont(wx.Font(9, wx.SWISS, wx.NORMAL, wx.BOLD, False,
              'Tahoma'))

        self.textCnpj = wx.TextCtrl(id=-1, name='textCtrl1', parent=self,
              pos=wx.Point(140, 60), size=wx.Size(192, 21), style=0)

        self.textNumero = wx.TextCtrl(id=-1, name='textCtrl1', parent=self,
              pos=wx.Point(140, 38), size=wx.Size(192, 21), style=0)

        self.textValor = wx.TextCtrl(id=-1, name='textCtrl1', parent=self,
              pos=wx.Point(140, 82), size=wx.Size(192, 21), style=0)

        self.botaoComprar = wx.Button(id=1, label='Comprar',
              name='button1', parent=self, pos=wx.Point(240, 156),
              size=wx.Size(75, 23), style=0)

        

        self.Bind(wx.EVT_BUTTON, self.comprar, id=1)


    def comprar(self, event):
        rep= Armazenar()
        cnpj = int(self.textCnpj.GetValue())
        numero = int(self.textNumero.GetValue())
        valor = float(self.textValor.GetValue())
        data = date.today().strftime("%d/%m/%Y")
        hora = datetime.now()
        arvore = rep.getArvoreE()#RETORNA A ARVORE DE ESTABELECIMENTOS                      
        arvoreC = rep.getArvore()#RETORNA A ARVORE DE CARTOES
        estab = arvore.tree_Search(arvore.rootNode, cnpj)# RETORNA O NODO, SE EXISTIR  
        cartao = arvoreC.tree_Search(arvoreC.rootNode, numero)# RETORNA O NODO, SE EXISTIR            
        if cartao != None and estab != None:                
            cartao_data = cartao.getData()#RETORNA O ATRIBUTO DATA DO NODO
            estab_data = estab.getData()#RETORNA O ATRIBUTO DATA DO NODO
            horario = estab_data.horario# A VARIAVEL HORARIO EH UMA LISTA, CUJO PRIMEIRO ELEMENTO EH O DE INICIO E O SEGUNDO O DE FINAL
            inicio = horario[0].rsplit(':')
            fim = horario[1].rsplit(':')
            new_inicio = int(inicio[0] + inicio[1])
            new_fim = int(fim[0] + fim[1])
            new_hora = int(str(hora.hour)+str(hora.minute))
            if valor <= float(cartao_data.disponivel):#TESTA SE O CARTAO TEM SALDO PARA REALIZAR A COMPRA
                if new_hora >= new_inicio and new_hora < new_fim:#TESTA SE O HORARIO EH PERMITIDO
                    arvore.modificar_nodoE(arvore.rootNode, cnpj, valor)#VARRE A ARVORE, ACHA O NODO E MUDA 'VENDIDO' E 'RECEITA'
                    arvoreC.modificar_nodo(arvoreC.rootNode, numero, valor)#VARRE A ARVORE, ACHA O NODO E MUDA 'DISPONIVEL'
                    rep.armazenar_compra(cartao_data, estab_data, valor, data)
                    rep.apagar('cartao')#APAGA O ARQUIVO CARTAO.TXT
                    rep.apagar('estabelecimento')#APAGA O ARQUIVO ESTABELECIMENTO.TXT
                    arvore.armazenarEmOrdemE(arvore.rootNode)#INSERE TODA A ARVORE NO ARQUIVO
                    arvoreC.armazenarEmOrdem(arvoreC.rootNode)#INSERE TODA A ARVORE NO ARQUIVO

                    mensagem = wx.MessageDialog(None, 'Compra efetuada com sucesso!', ':: BSI Card ::',style = wx.OK)
                    msg = mensagem.ShowModal()
                else:
                        mensagem = wx.MessageDialog(None, 'O horario nao eh permitido para realizar a compra!', ':: BSI Card ::',style = wx.OK)
                        msg = mensagem.ShowModal()
            else:
                    mensagem = wx.MessageDialog(None, 'Voce nao tem saldo suficiente para realizar a compra!', ':: BSI Card ::',style = wx.OK)
                    msg = mensagem.ShowModal()
        else:
                mensagem = wx.MessageDialog(None, 'Nao ha nenhum cartao ou estabelecimento cadastrado com esse dado!', ':: BSI Card ::',style = wx.OK)
                msg = mensagem.ShowModal()
                         
        
        
        
        


    def __init__(self, parent):

        

        self._init_ctrls(parent)
        self.AcceptsFocus()
        self.Enable(True) 
